package com.hrt.datasender.datacollect.drive;

import java.util.List;

import com.hrt.datasender.datadao.model.BcDeviceConfigModel;
import com.hrt.datasender.datadao.model.BcDevicesModel;
import com.hrt.datasender.datadao.model.BcDeviceMonitorParamModel;
import com.hrt.datasender.datadao.model.BdSourceModel;

/**
 * 为了保持拓展性，驱动的配置不做约束，可以在界面上自由设置
 * 
 * @author gislin
 *
 */
public interface IDrive {

    /**
     * 初始化执行
     */
    void init(BcDevicesModel device, List<BcDeviceMonitorParamModel> params, List<BcDeviceConfigModel> configs);

    /**
     * 设置定时规则，注意，这里的定时规则不能太频繁，特别是应用在串口中的时候，如果间隔太短，报文询问的时候会出现紊乱的状态 <br>
     * "0/2 * * * * ?";
     * 
     * @return
     */
    String getConsStr();

    /**
     * 获取驱动描述
     * 
     * @return
     */
    String getNote();

    /**
     * 获取驱动的id
     * 
     * @return
     */
    default String getDriveId() {
        String className = getClass().getName();
        String id = className.replace("com.hrt.datasender.datacollect.drive.", "");
        return id;
    }

    /**
     * 获取驱动的id
     * 
     * @return
     */
    String getDriveName();

    /**
     * 获取当前，驱动已经处理好的数据 暴露给上层业务获取
     * 
     * @return
     */
    List<BdSourceModel> getCurrentData();

    /**
     * 获取这个驱动设置的元数据描述
     * 
     * @return
     */
    List<DriveParameterMetadata> getParameterMetadata();

}